package com.tulele.vtool.service.impl;

import com.tulele.vtool.mapper.UserArticleTypeInfoMapper;
import com.tulele.vtool.model.UserArticleTypeInfo;
import com.tulele.vtool.model.combinedEntity.CombinedUserArticleTypeInfo;
import com.tulele.vtool.service.IUserArticleTypeInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Optional;

@Service
public class UserArticleTypeInfoServiceImpl implements IUserArticleTypeInfoService {

    @Autowired
    private UserArticleTypeInfoMapper userArticleTypeInfoMapper;

    @Override
    public int recordUserArticleTypeInfo(Integer userId, String userArticleTypeIds) {

        UserArticleTypeInfo firstUpdateUserArticleTypeInfo = new UserArticleTypeInfo();
        firstUpdateUserArticleTypeInfo.setUserId(userId);
        firstUpdateUserArticleTypeInfo.setEffectiveStatus(0);
        userArticleTypeInfoMapper.updateUserArticleTypeEffectiveStatus(firstUpdateUserArticleTypeInfo);

        String [] typeIds = userArticleTypeIds.split(",");

        for (String articleTypeId : typeIds) {
            Integer articleTypeIdInt = Integer.valueOf(articleTypeId);

            //查询用户对当前品牌的设置情况
            UserArticleTypeInfo queryInfo = new UserArticleTypeInfo();
            queryInfo.setUserId(userId);
            queryInfo.setArticleTypeId(articleTypeIdInt);
            UserArticleTypeInfo queryInfoInDB = userArticleTypeInfoMapper.queryUserArticleTypeStatusInfo(queryInfo);

            //如果不存在，则直接添加
            if (queryInfoInDB == null) {

                UserArticleTypeInfo addUserArticleTypeInfo = new UserArticleTypeInfo();
                addUserArticleTypeInfo.setArticleTypeId(articleTypeIdInt);
                addUserArticleTypeInfo.setUserId(userId);
                addUserArticleTypeInfo.setEffectiveStatus(1);
                addUserArticleTypeInfo.setCreateTime(new Date());
                userArticleTypeInfoMapper.addUserArticleTypeInfo(addUserArticleTypeInfo);

            } else {
                //如果文章类型状态为无效状态，则进行修改
                int effectiveStatus = Optional.ofNullable(queryInfoInDB.getEffectiveStatus()).orElse(0);
                if (effectiveStatus == 0) {
                    UserArticleTypeInfo updateUserArticleTypeInfo = new UserArticleTypeInfo();
                    updateUserArticleTypeInfo.setId(queryInfoInDB.getId());
                    updateUserArticleTypeInfo.setEffectiveStatus(1);
                    updateUserArticleTypeInfo.setModifyTime(new Date());
                    userArticleTypeInfoMapper.updateUserArticleInfo(updateUserArticleTypeInfo);
                }

            }
        }

        return 0;
    }

    @Override
    public List<CombinedUserArticleTypeInfo> getUserArticleTypeInfo(Integer userId) {
        return userArticleTypeInfoMapper.queryUserArticleTypeInfo(userId);
    }

    @Override
    public List<CombinedUserArticleTypeInfo> getUserPersonalArticleTypeInfo(Integer userId) {
        return userArticleTypeInfoMapper.queryUserPersonalArticleTypeInfo(userId);
    }

    @Override
    public int modifyUserArticleTypeEffectiveStatus(UserArticleTypeInfo userArticleTypeInfo) {
        return userArticleTypeInfoMapper.updateUserArticleTypeEffectiveStatus(userArticleTypeInfo);
    }

    @Override
    public List<Integer> getUserConcernArticleTypeInfo(Integer userId) {
        return userArticleTypeInfoMapper.queryUserConcernArticleTypeInfo(userId);
    }
}
